'use strict';
/**
 * author：小小游 --- allen
 * date：2018.02.03
 * lastUpdateDate：2018.02.03
 * description：let / const的基本用法和区别
 */

/**
  * 1.var是属于函数级别作用域变量的声明，它是会提升到整个函数级别之上或全局的
  * 2.let是属于块级作用域变量的声明，只能在当前声明的块级作用域内或当前声明
  *   的子级的块级作用域访问
  */

/**
 * 在ES5里，function是被预解析的(就是不使用阳格模式：'use strict';)
 * 在ES6(Javascript 2015版)里function是不被预解析的(就是
 * 使用阳格模式：'use strict';)
 */
/**
 * 注意在node的4.X版本测试，就是想说明在ES6(Javascript 2015版)里function
 * 是不被预解析的(就是使用阳格模式：'use strict';)
 */
function allen () {
    console.log(111);
}

function xiaoyou () {
    allen ();
    if (false) {
        function allen () {
            console.log(222);
        }
    }
}

/**
 * 如果使用了Javascript-ES6阳格模式('use strict';)那么函数是不被预解析的，
 * 结果是111
 * 如果注释了'use strict';使用的是ES5，那么此时结果是222，解释如下：
 * function xiaoyou () {
 *     // function allen () {
 *         // console.log(222);
 *     // }
 *     allen ();
 *     // 即使它永远不会被执行
 *     if (false) {
 *         // 这里的allen ()函数将会被预解析到函数顶部
 *     }
 * }
 */
xiaoyou ();
